package br.uniceub.fsw.util;

import java.util.ArrayList;

/**
 *<p align='justify'>
 * Classe que recebe mensagens de erro e as passa para
 * a BaseFacade, visando um tratamento de erro mais
 * transparente para o usuario. Note os dois construtores:
 * é possível 'criar' um novo erro passando como parametro um
 * objeto String ou <i>setando</i> a descricao do erro.
 * <br/>
 * Exemplos:<br/>
 *     
 * ErroVO erro = new ErroVO("Meu erro."); -> Usando o método construtor
 * 
 * <br/>OU<br/>
 * 
 * ErroVO erro = new ErroVO(); -> Usando o método <i>set</i><br/>
 * erro.setDsErro("Meu erro.");
 * </p>
 * 
 * @author sergiofernandomuniz
 * @version 1.0
 * 
 */
public class ErroVO {

    
    private String dsErro;
    
    /**
     * 
     * @param descricaoDoErro
     * 
     */
    public ErroVO(String descricaoDoErro){
        
        this.setDsErro(descricaoDoErro);
        
    }
    
    public ErroVO(){
        
        
        
    }
    
    /**
     * 
     * @param listaErros
     * @return Uma div com todos os erros encontrados apo's o <i>request</i>
     */
    public static StringBuffer montaMensagemErros(ArrayList<ErroVO> listaErros){
        
        StringBuffer sb = new StringBuffer();
        
        sb.append("O formulario contém o(s) seguinte(s) erro(s) de preenchimento: ");
        sb.append("</br>");
        sb.append("<ul class='erro'>");

        for(int i = 0; i < listaErros.size(); i++){
            
            sb.append("<li>");
            sb.append(listaErros.get(i).getDsErro().toString());
            sb.append("</li>");          

        }
        
        sb.append("</ul>");
        System.out.println(sb);
        return sb;
        
    }
    
    public static StringBuffer montaMensagemErro(String dsErro){
        
        StringBuffer sb = new StringBuffer();
        
        sb.append("<ul class='erro'>");
        sb.append("<li>");
        sb.append(dsErro);
        sb.append("</li>");
        sb.append("</ul>");
        
        return sb;
        
    }
    
    private ArrayList recuperaErrosFormulario(ArrayList<ErroVO> listaErros){
        
        for(int i = 0; i < listaErros.size(); i++){
            
            ErroVO erro = listaErros.get(i);
            
            listaErros.add(erro);
            
        }
        
        return listaErros;
        
    }
    
    public static boolean validaErro(String dsErro, 
            ArrayList<ErroVO> listaMensagensExecucao)
    
    {
        
        if((!ErroVO.verificaSeErroEstaNuloOuVazio(dsErro)) &&
                !ErroVO.verificaSeErroJaExisteNaListaErros(dsErro, 
                listaMensagensExecucao)){
            
            return true;
            
        }else{
            
            return false;
            
        }
        
    }
    
    protected static boolean verificaSeErroJaExisteNaListaErros(String dsErro, 
                ArrayList<ErroVO> listaMensagensExecucao){
        
        ErroVO novoErro = new ErroVO();
        
        boolean erroEncontrado = false;
        
        novoErro.setDsErro(dsErro);
        
        for(int i = 0; i < listaMensagensExecucao.size(); i++){
            
            ErroVO erroExistente = listaMensagensExecucao.get(i);
            
            if(novoErro.getDsErro().equals(erroExistente.getDsErro())){
                
                erroEncontrado = true;
                
                break;        
                
            }
            
            if(!erroEncontrado){
                
                return false;
                
            }
                
        }
        
        return true;
            
    }
    
    private boolean verificaSeListaErrosEstaVazia(ArrayList<ErroVO> listaErros){
        
        if(listaErros.isEmpty()){
            
            return true;
            
        }else{
            
            return false;
            
        }
        
    }
    
    public static boolean verificaSeErroEstaNuloOuVazio(String dsErro){
        
        if((dsErro == null) || (dsErro.trim().length() == 0)){
            
        return true;
            
        }
        
        return false;
        
    }

    public String getDsErro() {
        return dsErro;
    }

    public void setDsErro(String dsErro) {
        this.dsErro = dsErro;
    }  

}
